查看原文
其他

Android DatePicker,NumPicker解析(实例)

2017-09-09 qzs 安卓干货铺

DatePicker

Android提供了一个选择日期的控件——DatePicker,基本的用法就不说了,在用的过程中会出现几个问题,分割线的颜色无法改变,字体大小,以及DatePicker的整体大小调整,下面就来解决这些问题.。

1.更改DatePicker分割线的颜色



  /**     * 设置时间选择器的分割线颜色     *     * @param datePicker     */    private void setDatePickerDividerColor(DatePicker datePicker) {        // Divider changing:        // 获取 mSpinners        LinearLayout llFirst = (LinearLayout) datePicker.getChildAt(0);        // 获取 NumberPicker        LinearLayout mSpinners = (LinearLayout) llFirst.getChildAt(0);        for (int i = 0; i < mSpinners.getChildCount(); i++) {            NumberPicker picker = (NumberPicker) mSpinners.getChildAt(i);            Field[] pickerFields = NumberPicker.class.getDeclaredFields()            for (Field pf : pickerFields) {                if (pf.getName().equals("mSelectionDivider")) {                    pf.setAccessible(true);                    try {                        pf.set(picker, new ColorDrawable(Color.parseColor("#bd1b21")));//设置分割线颜色                    } catch (IllegalArgumentException e) {                        e.printStackTrace();                    } catch (Resources.NotFoundException e) {                        e.printStackTrace();                    } catch (IllegalAccessException e) {                        e.printStackTrace();                    }                    break;                }            }        }    }

2.更改字体大小-直接在style中写textsize属性

 <style name="AppTheme" parent="AppBaseTheme">        <!-- All customizations that are NOT specific to a particular API-level can go here. -->        <item name="android:textSize">10sp</item>    </style>

3.DatePicker的整体大小调整-resizePikcer(datePicker);



  /**     * 调整FrameLayout大小     *     * @param tp     */    private void resizePikcer(FrameLayout tp) {        List<NumberPicker> npList = findNumberPicker(tp);        for (NumberPicker np : npList) {            resizeNumberPicker(np);        }    }

 /**     * 得到viewGroup里面的numberpicker组件     *     * @param viewGroup     * @return     */    private List<NumberPicker> findNumberPicker(ViewGroup viewGroup) {        List<NumberPicker> npList = new ArrayList<NumberPicker>();        View child = null;        if (null != viewGroup) {            for (int i = 0; i < viewGroup.getChildCount(); i++) {                child = viewGroup.getChildAt(i);                if (child instanceof NumberPicker) {                    npList.add((NumberPicker) child);                } else if (child instanceof LinearLayout) {                    List<NumberPicker> result = findNumberPicker((ViewGroup) child);                    if (result.size() > 0) {                        return result;                    }                }            }        }        return npList;    }

 /*   * 调整大小   */    private void resizeNumberPicker(NumberPicker np) {        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(280, LinearLayout.LayoutParams.WRAP_CONTENT);        params.setMargins(10, 0, 10, 0);        np.setLayoutParams(params);    }

NumPicker

NumPicker是一个数字选择器,下面通过两个NumPicker来实现时间选择器,并且修改分割线的颜色(主要实现了NumberPicker.Formatter和OnValueChangeListener接口)。



/* 更改分割线颜色 */    private void setNumberPickerDividerColor(NumberPicker numberPicker) {        NumberPicker picker = numberPicker;        Field[] pickerFields = NumberPicker.class.getDeclaredFields();        for (Field pf : pickerFields) {            if (pf.getName().equals("mSelectionDivider")) {                pf.setAccessible(true);                try {                    //设置分割线的颜色值 透明                    pf.set(picker, new ColorDrawable(this.getResources().getColor(android.R.color.holo_red_dark)));                } catch (IllegalArgumentException e) {                    e.printStackTrace();                } catch (Resources.NotFoundException e) {                    e.printStackTrace();                } catch (IllegalAccessException e) {                    e.printStackTrace();                }                break;            }        }    }

   @Override    public String format(int value) {        String tmpStr = String.valueOf(value);        if (value < 10) {            tmpStr = "0" + tmpStr;        }        return tmpStr;    }  private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {        @Override        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {            Log.e("时:", newVal + "");        }    };    private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {        @Override        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {            Log.e("分:", newVal + "");        }    };

  /*    时间(hourpicker、minuteicker是NumberPicker)    */        hourpicker.setFormatter(this);        hourpicker.setOnValueChangedListener(mOnHourChangedListener);        hourpicker.setMaxValue(24);        hourpicker.setMinValue(0);        hourpicker.setValue(0);        minuteicker.setOnValueChangedListener(mOnMinuteChangedListener);        minuteicker.setFormatter(this);        minuteicker.setMaxValue(60);        minuteicker.setMinValue(0);        minuteicker.setValue(0);

源码下载地址:

http://download.csdn.net/download/qq_34908107/9906332



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存